﻿<ResourceDictionary
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:WpfToolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
    xmlns:Primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit">

	<ResourceDictionary.MergedDictionaries>
		<ResourceDictionary Source="Brushes.xaml"/>
	</ResourceDictionary.MergedDictionaries>

	<!-- Value converters -->
	<BooleanToVisibilityConverter x:Key="bool2VisibilityConverter" />
	
	<!-- DataGridColumnHeader Right Gripper Style -->
	<Style x:Key="ColumnHeaderRightGripperStyle" TargetType="{x:Type Thumb}">
		<Setter Property="Width" Value="8"/>
		<Setter Property="Background" Value="Transparent"/>
		<Setter Property="Cursor" Value="SizeWE"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type Thumb}">
					<Border Padding="{TemplateBinding Padding}"
							Background="{TemplateBinding Background}">
					</Border>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>
	<!-- DataGridColumnHeader Left Gripper Style -->
	<Style x:Key="ColumnHeaderLeftGripperStyle" 
		   BasedOn="{StaticResource ColumnHeaderRightGripperStyle}" 
		   TargetType="{x:Type Thumb}">
		<Setter Property="Width" Value="8"/>
		<Setter Property="Background" Value="Transparent"/>
		<Setter Property="Cursor" Value="SizeWE"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type Thumb}">
					<Border Name="Border"
							Padding="{TemplateBinding Padding}" 
							Background="{TemplateBinding Background}">
						<Canvas>
							<Line RenderOptions.EdgeMode="Aliased" Stroke="#88B0E4"
								  X1="7" Y1="{Binding ElementName=Border, Path=ActualHeight}"
								  X2="7" Y2="0"/>
						</Canvas>
					</Border>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>
	<!-- DataGridColumnHeader Style -->
	<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type WpfToolkit:DataGridColumnHeader}">
		<Setter Property="VerticalContentAlignment" Value="Center" />
		<Setter Property="Background" Value="{StaticResource HeaderBackgroundBrush}"/>
		<Setter Property="BorderBrush" Value="{StaticResource HeaderBorderBrush}" />
		<Setter Property="BorderThickness" Value="0,1,0,1" />
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type WpfToolkit:DataGridColumnHeader}">
					<Grid>
						<WpfToolkit:DataGridHeaderBorder
							x:Name="headerBorder"
							SortDirection="{TemplateBinding SortDirection}"
							IsHovered="{TemplateBinding IsMouseOver}"
							IsPressed="{TemplateBinding IsPressed}"
							IsClickable="{TemplateBinding CanUserSort}"
							Background="{TemplateBinding Background}"
							BorderBrush="{TemplateBinding BorderBrush}"
							BorderThickness="{TemplateBinding BorderThickness}"
							Padding ="{TemplateBinding Padding}"
							SeparatorVisibility="{TemplateBinding SeparatorVisibility}"
							SeparatorBrush="{TemplateBinding SeparatorBrush}">
							<Border BorderBrush="{StaticResource HeaderInnerBorderBrush}" 
									BorderThickness="0,1,0,0">
								<TextBlock
									Text="{Binding}" Margin="4,0,4,0"
									SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
									VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
									HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
							</Border>
						</WpfToolkit:DataGridHeaderBorder>

						<Thumb x:Name="PART_LeftHeaderGripper"
							   HorizontalAlignment="Left"
							   Style="{StaticResource ColumnHeaderRightGripperStyle}"/>
						<Thumb x:Name="PART_RightHeaderGripper"
							   HorizontalAlignment="Right"
							   Style="{StaticResource ColumnHeaderLeftGripperStyle}"/>
					</Grid>
					<ControlTemplate.Triggers>
						<Trigger Property="IsMouseOver" Value="True">
							<Setter TargetName="headerBorder" Property="Background" 
									Value="{StaticResource HeaderHighlightedBackgoundBrush}" />
						</Trigger>
						<Trigger Property="IsPressed" Value="True">
							<Setter TargetName="headerBorder" Property="Background" 
									Value="{StaticResource HeaderPressedBackgroundBrush}" />
						</Trigger>
					</ControlTemplate.Triggers>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>
    <!-- Right Aligned DataGridColumnHeader Style-->
    <Style x:Key="RightAlignedColumnHeaderStyle" 
           TargetType="{x:Type WpfToolkit:DataGridColumnHeader}"
           BasedOn="{StaticResource ColumnHeaderStyle}">
        <Setter Property="HorizontalContentAlignment" Value="Right"/>
    </Style>
    <!-- Center Aligned DataGridColumnHeader Style-->
    <Style x:Key="CenterAlignedColumnHeaderStyle" 
           TargetType="{x:Type WpfToolkit:DataGridColumnHeader}"
           BasedOn="{StaticResource ColumnHeaderStyle}">
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
    </Style>

    <!-- DataGridRowHeader Gripper -->
	<Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}">
		<Setter Property="Height" Value="8"/>
		<Setter Property="Background" Value="Transparent"/>
		<Setter Property="Cursor" Value="SizeNS"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type Thumb}">
					<Border Padding="{TemplateBinding Padding}"
							Background="{TemplateBinding Background}"/>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>
	<!-- DataGridRowHeader Style -->
	<Style x:Key="{x:Type WpfToolkit:DataGridRowHeader}"
		   TargetType="{x:Type WpfToolkit:DataGridRowHeader}">
		<Setter Property="Background" Value="{StaticResource HeaderBackgroundBrush}" />
		<Setter Property="BorderBrush" Value="{StaticResource HeaderBorderBrush}" />
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type WpfToolkit:DataGridRowHeader}">
					<Grid>
						<WpfToolkit:DataGridHeaderBorder 
							x:Name="headerBorder"
							IsSelected="{TemplateBinding IsRowSelected}"
							IsHovered ="{TemplateBinding IsMouseOver}"
							IsPressed="{TemplateBinding IsPressed}"
							Background="{TemplateBinding Background}"
							BorderBrush="{TemplateBinding BorderBrush}"
							BorderThickness="1,0,1,1"
							Padding ="{TemplateBinding Padding}"
							Orientation="Horizontal"
							SeparatorVisibility="{TemplateBinding SeparatorVisibility}"
							SeparatorBrush="{TemplateBinding SeparatorBrush}">
							<Border BorderBrush="{StaticResource HeaderInnerBorderBrush}"
									BorderThickness="0,1,0,0">
								<StackPanel Orientation="Horizontal">
									<ContentPresenter
										SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
										VerticalAlignment="Center"/>
									<Control
										SnapsToDevicePixels="false"
										Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type WpfToolkit:DataGridRow}}, Path=(Validation.HasError), Converter={StaticResource bool2VisibilityConverter}}"
										Template="{Binding RelativeSource={RelativeSource AncestorType={x:Type WpfToolkit:DataGridRow}}, Path=ValidationErrorTemplate}" />
								</StackPanel>
							</Border>
						</WpfToolkit:DataGridHeaderBorder>
						
						<Thumb x:Name="PART_TopHeaderGripper"
							   VerticalAlignment="Top"
							   Style="{StaticResource RowHeaderGripperStyle}"/>
						<Thumb x:Name="PART_BottomHeaderGripper"
							   VerticalAlignment="Bottom"
							   Style="{StaticResource RowHeaderGripperStyle}"/>
					</Grid>
					<ControlTemplate.Triggers>
						<Trigger Property="IsMouseOver" Value="True">
							<Setter TargetName="headerBorder" Property="Background" 
									Value="{StaticResource HeaderHighlightedBackgoundBrush}" />
						</Trigger>
						<Trigger Property="IsPressed" Value="True">
							<Setter TargetName="headerBorder" Property="Background" 
									Value="{StaticResource HeaderPressedBackgroundBrush}" />
						</Trigger>
					</ControlTemplate.Triggers>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>

<!-- Left Aligned DataGridCell Style -->
<Style x:Key="LeftAlignedCellStyle" TargetType="{x:Type WpfToolkit:DataGridCell}" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type WpfToolkit:DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Left"
                                      VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<!-- Right Aligned DataGridCell Style -->
<Style x:Key="RightAlignedCellStyle" TargetType="{x:Type WpfToolkit:DataGridCell}" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type WpfToolkit:DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Right"
                                      VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<!-- Center Aligned DataGridCell Style -->
<Style x:Key="CenterAlignedCellStyle" TargetType="{x:Type WpfToolkit:DataGridCell}" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type WpfToolkit:DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center"
                                      HorizontalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

    <!-- SelectAllButton ControlTemplate -->
	<ControlTemplate x:Key="SelectAllButtonTemplate" TargetType="{x:Type Button}">
		<Grid>
			<Rectangle x:Name="Border" SnapsToDevicePixels="True"
					   Stroke="{StaticResource HeaderBorderBrush}"
					   Fill="{StaticResource HeaderBackgroundBrush}" />
			<Border SnapsToDevicePixels="True" Margin="1,1,1,0"
					BorderBrush="White" BorderThickness="0,1,0,0" />
			<Polygon x:Name="Arrow"
					 HorizontalAlignment="Right"
					 VerticalAlignment="Bottom"
					 Margin="8,8,3,3"
					 Opacity="0.15"
					 Fill="Black"
					 Stretch="Uniform"
					 Points="0,10 10,10 10,0" />
		</Grid>
		<ControlTemplate.Triggers>
			<Trigger Property="IsMouseOver" Value="True">
				<Setter TargetName="Border" Property="Fill"
						Value="{StaticResource HeaderHighlightedBackgoundBrush}" />
			</Trigger>
			<Trigger Property="IsPressed" Value="True">
				<Setter TargetName="Border" Property="Fill"
						Value="{StaticResource HeaderPressedBackgroundBrush}" />
			</Trigger>
			<Trigger Property="IsEnabled" Value="False">
				<Setter TargetName="Arrow" Property="Visibility" Value="Collapsed" />
			</Trigger>
		</ControlTemplate.Triggers>
	</ControlTemplate>
    
	<!-- DataGrid Style -->
	<Style x:Key="{x:Type WpfToolkit:DataGrid}" TargetType="{x:Type WpfToolkit:DataGrid}">
		<Setter Property="Background" Value="{StaticResource DefaultControlBackgroundBrush}"/>
		<Setter Property="Foreground" Value="{StaticResource DefaultControlForegroundBrush}"/>
		<Setter Property="BorderBrush" Value="{StaticResource DefaultControlBorderBrush}" />
		<Setter Property="HorizontalGridLinesBrush" Value="{StaticResource GridLineColorBrush}" />
		<Setter Property="VerticalGridLinesBrush" Value="{StaticResource GridLineColorBrush}" />
		<Setter Property="AlternatingRowBackground" Value="{StaticResource AlternateRowBackgroundBrush}" />
		<Setter Property="ColumnHeaderStyle" Value="{StaticResource ColumnHeaderStyle}"/>
		<Setter Property="BorderThickness" Value="1" />
		<!-- This is needed to force DG to have a non-default value.  Otherwise the DGR.DetailsVisibility cannot have a value of VisibleWhenSelected by default. -->
		<Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected" />
		<Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type WpfToolkit:DataGrid}">
					<Border
						Background="{TemplateBinding Background}"
						BorderBrush="{TemplateBinding BorderBrush}"
						BorderThickness="{TemplateBinding BorderThickness}"
						SnapsToDevicePixels="True"
						Padding="{TemplateBinding Padding}">
						<ScrollViewer Focusable="false" Name="DG_ScrollViewer">
							<ScrollViewer.Template>
								<ControlTemplate TargetType="{x:Type ScrollViewer}">
									<Grid>
										<Grid.RowDefinitions>
											<RowDefinition Height="Auto"/>
											<RowDefinition Height="*"/>
											<RowDefinition Height="Auto"/>
										</Grid.RowDefinitions>

										<Grid.ColumnDefinitions>
											<ColumnDefinition Width="Auto"/>
											<ColumnDefinition Width="*"/>
											<ColumnDefinition Width="Auto"/>
										</Grid.ColumnDefinitions>

										<!--Left Column Header Corner -->
										<Button 
											Command="{x:Static WpfToolkit:DataGrid.SelectAllCommand}"
											Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type WpfToolkit:DataGrid}}, Path=CellsPanelHorizontalOffset}"
											Focusable="false"
											Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type WpfToolkit:DataGrid}}, Path=HeadersVisibility, Converter={x:Static WpfToolkit:DataGrid.HeadersVisibilityConverter}, ConverterParameter={x:Static WpfToolkit:DataGridHeadersVisibility.All}}" 
											Template="{StaticResource SelectAllButtonTemplate}"/>
										<!--Column Headers-->
										<Primitives:DataGridColumnHeadersPresenter 
											Grid.Column="1" 
											Name="PART_ColumnHeadersPresenter"
											Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type WpfToolkit:DataGrid}}, Path=HeadersVisibility, Converter={x:Static WpfToolkit:DataGrid.HeadersVisibilityConverter}, ConverterParameter={x:Static WpfToolkit:DataGridHeadersVisibility.Column}}"/>

										<!--DataGrid content-->
										<ScrollContentPresenter x:Name="PART_ScrollContentPresenter" Grid.Row="1" Grid.ColumnSpan="2" CanContentScroll="{TemplateBinding CanContentScroll}" />

										<ScrollBar
											Grid.Row="0" Grid.RowSpan="2" Grid.Column="2" Name="PART_VerticalScrollBar"
											Orientation="Vertical"
											Maximum="{TemplateBinding ScrollableHeight}"
											ViewportSize="{TemplateBinding ViewportHeight}"
											Value="{Binding Path=VerticalOffset, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"
											Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>

										<Grid Grid.Row="2" Grid.Column="1">
											<Grid.ColumnDefinitions>
												<ColumnDefinition Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type WpfToolkit:DataGrid}}, Path=NonFrozenColumnsViewportHorizontalOffset}"/>
												<ColumnDefinition Width="*"/>
											</Grid.ColumnDefinitions>
											<ScrollBar 
												Grid.Column="1"
												Name="PART_HorizontalScrollBar"
												Orientation="Horizontal"
												Maximum="{TemplateBinding ScrollableWidth}"
												ViewportSize="{TemplateBinding ViewportWidth}"
												Value="{Binding Path=HorizontalOffset, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"
												Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
										</Grid>
									</Grid>
								</ControlTemplate>
							</ScrollViewer.Template>
							<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
						</ScrollViewer>
					</Border>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
		<Style.Triggers>
			<Trigger Property="IsGrouping" Value="true">
				<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
			</Trigger>
		</Style.Triggers>
	</Style>
	
</ResourceDictionary>